def score_to_grade(score):
    """
    单个成绩转化为等级
    :param score: 原始分数（0-100之间的数字）
    :return: 等级字符串（优秀/及格/不及格）
    """
    # 校验成绩有效性
    if not isinstance(score, (int, float)):
        return "无效成绩（需为数字）"
    if score < 0 or score > 100:
        return "无效成绩（需在0-100之间）"
    
    # 等级判定
    if 80 <= score <= 100:
        return "优秀"
    elif 60 <= score <= 79:
        return "及格"
    else:  # 0-59
        return "不及格"


def batch_score_to_grade(score_data):
    """
    批量成绩转化（支持单个学生多科目/多个学生多科目）
    :param score_data: 成绩数据，格式：
        - 单学生多科目：{"语文": 85, "数学": 62, ...}
        - 多学生多科目：{"张三": {"语文": 85, ...}, "李四": {"数学": 58, ...}}
    :return: 转化后的等级数据
    """
    result = {}
    # 判断是单学生还是多学生格式
    if isinstance(list(score_data.values())[0], (int, float)):
        # 单学生多科目：直接转化每个科目
        for subject, score in score_data.items():
            result[subject] = score_to_grade(score)
    else:
        # 多学生多科目：遍历每个学生的每个科目
        for student, subjects in score_data.items():
            result[student] = {}
            for subject, score in subjects.items():
                result[student][subject] = score_to_grade(score)
    return result
